.TH std::nothrow 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::nothrow \- std::nothrow

.SH Synopsis
   Defined in header <new>
   struct nothrow_t {};                                          \fI(until C++11)\fP
   struct nothrow_t { explicit nothrow_t() = default; }; \fB(1)\fP     \fI(since C++11)\fP
   extern const std::nothrow_t nothrow;                      \fB(2)\fP

   std::nothrow_t is an empty class type used to disambiguate the overloads of throwing
   and non-throwing allocation functions. std::nothrow is a constant of it.

.SH Example


// Run this code

 #include <iostream>
 #include <new>

 int main()
 {
     try
     {
         while (true)
         {
             new int[100000000ul];   // throwing overload
         }
     }
     catch (const std::bad_alloc& e)
     {
         std::cout << e.what() << '\\n';
     }

     while (true)
     {
         int* p = new(std::nothrow) int[100000000ul]; // non-throwing overload
         if (p == nullptr)
         {
             std::cout << "Allocation returned nullptr\\n";
             break;
         }
     }
 }

.SH Output:

 std::bad_alloc
 Allocation returned nullptr

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to              Behavior as published              Correct behavior
   LWG 2510 C++11      the default constructor was non-explicit, which made explicit
                       could lead to ambiguity

.SH See also

   operator new   allocation functions
   operator new[] \fI(function)\fP
